﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DBUtils;
using System.Text;
using System.Security.Cryptography;

public partial class EmployeeInfo_ChangePassword : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    /// <summary>
    /// 修改按钮点击
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnChange_Click(object sender, EventArgs e)
    {
        //设立一个用户输入的密码是否正确的标志变量。
        bool bValidPassword = false;

        //保存哈希后的数据库密码
        byte[] arHashedSavedPass = new byte[20];


        //保存反映数据库操作正确与否的返回值
        int iRetValue;


        //从数据库中获取用户正确的密码。
        iRetValue = DBUtils.Login.GetSavedPassword(Session["LogonName"].ToString(), ref arHashedSavedPass);

        if (iRetValue == (int)DBResult.Success)
        {
            //如果数据库操作无误，则验证数据库密码和用户输入的密码。

            //对用户输入的密码进行 Unicode 编码。
            //在下面的代码中对用户输入的密码进行了哈希处理，采用的是 SHA-1 算法。
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] arSuppliedPass = UE.GetBytes(txtOldPwd.Text);

            //对上一步得到的 Unicode 编码值进行哈希处理。
            SHA1Managed SHhash = new SHA1Managed();
            byte[] arHashSuppliedPass = SHhash.ComputeHash(arSuppliedPass);

            //比较数据库密码和用户输入的密码两者的哈希值是否相等。
            bool bHashesEqual = true;

            int x;	//x 为循环变量
            for (x = 0; x <= arHashSuppliedPass.Length - 1; x++)
                if (arHashSuppliedPass[x] != arHashedSavedPass[x])
                {
                    bHashesEqual = false;
                    break;
                }


            if (bHashesEqual)
            {
                //如果相等，则标志变量为真。
                bValidPassword = true;
            }
            else
            {
                //否则显示密码错误信息。
                bValidPassword = false;
            }

        }
        else
        {
            //如果数据库操作失败，则说明登录名不存在，显示错误信息。
        }

        if (bValidPassword)//原密码成功校验,开始修改密码
        {
            //对新密码的 Unicode 编码值进行哈希处理。
            UnicodeEncoding UE = new UnicodeEncoding();
            byte[] arSuppliedPass = UE.GetBytes(txtNewPwd.Text);
            SHA1Managed SHhash = new SHA1Managed();
            byte[] arHashSuppliedPass = SHhash.ComputeHash(arSuppliedPass);

            if(EmployeeInfo.ChangePassword(Convert.ToInt32(Session["EmployeeID"]),arHashSuppliedPass))//尝试修改密码
            {
                lblShow.Visible=true;
                lblShow.Text="修改密码成功";
            }
            else
            {
                lblShow.Visible=true;
                lblShow.Text="修改密码失败";
            }
        }
        else//原密码错误
        {
            lblShow.Text = "原密码错误";
            lblShow.Visible = true;
            return;
        }


    }
}
